(function(angular) {
	"use strict";
	angular.module("fs.waf").factory("fxCrossRateService", fxCrossRateService);
	fxCrossRateService.$inject = [ "formatService", "arithService" ];
	function fxCrossRateService(formatService, arithService) {

		// 2016-9-9 fx cross rate facility
		var FxCrossRate_Util = {
			checkIfCrossRateType : function(crossRateFlagVal) {
				return (crossRateFlagVal === "Y");
			},
			/*
			 * formIndex: the index of form in this document itemNo: array index
			 * of settlementDetails
			 */
			getFQDNForFxCrossRateFlag : function(setlDetail) {
				return setlDetail.fxCrossRateFlag;
			},
			getFxCrossRateFlagVal : function(setlDetail) {
				return setlDetail.fxCrossRateFlag;
			},
			setFxCrossRateFlagVal : function(setlDetail, flagVal) {
				setlDetail.fxCrossRateFlag = flagVal;
			},
			checkCrossRateType : function(setlDetail) {
				setlDetail.fxCrossRateFlag = "Y";
			},
			checkNonCrossRateFlagVal : function(setlDetail) {
				setlDetail.fxCrossRateFlag = "N";
			},
			getFxCrossRateVal : function(setlDetail) {
				var fxCrossRateStr = formatService.parseNumber(setlDetail.fxCrossRate);
				return (fxCrossRateStr ? arithService.calc(fxCrossRateStr, 0, "-") : 0);
			},
			getFxContractNoVal : function(setlDetail) {
				return setlDetail.fxContractNo;
			},
			isCrossRate : function(setlDetail) {
				return this.checkIfCrossRateType(this.getFxCrossRateFlagVal(setlDetail));
			},
			enableCrossRate : function(setlDetail) {
				// enable fxCrossRateFlag
				setlDetail.fxCrossRateFlag_Readonly = false;
				setlDetail.fxCrossRateFlag_Show = true;
				this.handleFxCrossRateSpan(setlDetail);
			},
			disableCrossRate : function(setlDetail) {
				setlDetail.fxCrossRateFlag_Show = false;
				this.hiddenFxCrossRateSpan(setlDetail);
			},
			handleFxCrossRateSpan : function(setlDetail) {
				if (this.isCrossRate(setlDetail)) {
					this.displayFxCrossRateSpan(setlDetail);
				} else {
					this.hiddenFxCrossRateSpan(setlDetail);
				}
			},
			displayFxCrossRateSpan : function(setlDetail) {
				setlDetail.fxCrossRate_Readonly = false;
				setlDetail.fxContractNo_Readonly = false;
				setlDetail.fxCrossRateCcyTo = setlDetail.payCcy;
				setlDetail.crossFxRateSpan_Show = true;
				setlDetail.fxRateSpan_Show = false;
			},
			hiddenFxCrossRateSpan : function(setlDetail) {
				setlDetail.crossFxRateSpan_Show = false;
				// setlDetail.fxRateSpan_Show= true;
			},
			/**
			 * calculate pay amount which is unround. itemAmt * fxRate2 = payAmt
			 * (fxMulflag=Yes)
			 */
			calculateRawPayAmt : function(setlDetail, fxMulflag, itemAmtVal) {
				var fxCrossRate = this.getFxCrossRateVal(setlDetail);
				if (this.isCrossRate(setlDetail)) {
					var tmpamt = 0;
					if (fxMulflag == "Y") {
						tmpamt = arithService.calc(itemAmtVal, fxCrossRate, "*");
					} else if (fxCrossRate != 0) {
						tmpamt = arithService.calc(itemAmtVal, fxCrossRate, "/");
					}
					return tmpamt;
				} else {
					return null;
				}
			},
			/**
			 * calculate item amount which is unround. itemAmt * fxRate2 =
			 * payAmt (fxMulflag=Yes)
			 */
			calculateRawItemAmt : function(setlDetail, fxMulflag, payAmtVal) {
				var fxCrossRate = this.getFxCrossRateVal(setlDetail);
				if (this.isCrossRate(setlDetail)) {
					var tmpamt = 0;
					if (fxMulflag == "Y" && fxCrossRate != 0) {
						tmpamt = arithService.calc(payAmtVal, fxCrossRate, "/");
					} else if (fxMulflag != "Y") {
						tmpamt = arithService.calc(payAmtVal, fxCrossRate, "*");
					}
					return tmpamt;
				} else {
					return null;
				}
			}
		};

		return {
			FxCrossRate_Util : FxCrossRate_Util
		};
	}
})(angular);
